#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "queue"
#include "TypeDefin.h"

using namespace std;

/*HJJ QQ479287006
 *给你二叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。

 

示例 1：


输入：root = [3,9,20,null,null,15,7]
输出：[[3],[9,20],[15,7]]
示例 2：

输入：root = [1]
输出：[[1]]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/binary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */


vector<vector<int>> levelOrder(TreeNode *root) {
    if (!root)
        return nullptr;

    vector<vector<int>> ret;
    queue<TreeNode *> q;
    q.push(root);
    vector<int> temp;
    while (!q.empty()) {
        int sizer = q.size();

        for (int i = 0; i < sizer; ++i) {
            TreeNode *t = q.front();
            temp.emplace_back(t->val);
            q.pop();

            if (t->left)
                q.emplace(t->left);
            if (t->right)
                q.emplace(t->right);
        }


        ret.push_back(temp);
        temp.clear();

    }

    return ret;
}